const config = require("./config.js"); //引入config文件
const shell = require("shelljs");
const path = require("path");
const Client = require("ssh2-sftp-client");

//打包npm run build
const compileDist = async () => {
  if (shell.exec(`npm run build`).code === 0) {
    console.log("打包成功");
  }
};

async function connectShell() {
  config.map((item) => {
    //遍历
    const sftp = new Client();
    sftp
      .connect({
        //连接服务器
        host: item.ip, // 服务器 IP  ssh地址
        port: item.port,
        username: item.username, // ssh 用户名
        password: item.password,
      })
      .then(() => {
        console.log("先执行拉下文件备份");
        //sftp.downloadDir（'第一个参数为拉取的路径，第二个参数为保存在本地的文件夹路径'）
        console.log(path.resolve("__dirname", item.rmovepath));
        // return sftp.downloadDir(item.path, path.resolve(item.rmovepath)) //path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径。
      })
      .then(() => {
        console.log("执行删除文件");
        //sftp.rmdir（删除服务器文件的路径）
        // sftp.rmdir(item.path, true);
        sftp.mkdir(item.path);
      })
      .then(() => {
        console.log("执行上传文件");
        //sftp.uploadDir（第一个参数为本地上传文件路径，第二个为上传到服务器的路径）
        console.log(path.resolve("__dirname", "../dist"));
        return sftp.uploadDir(path.resolve("__dirname", "../dist"), item.path);
      })
      .then(() => {
        console.log("上传完成");
        sftp.end();
      })
      .catch((err) => {
        console.log(err, "上传失败");
        sftp.end();
      });
  });
}

async function runStart() {
  //await compileDist(); //等待打包成功
  await connectShell(); //提交上传文件
}
runStart();
